export const getInputs = () => [[[1, 2, 1]], [[1, 2, 3, 4, 3]]];

/**
 * **[503. 下一个更大元素 II](https://leetcode.cn/problems/next-greater-element-ii/)**
 *
 * 给定一个循环数组 `nums` （ `nums[nums.length - 1]` 的下一个元素是 `nums[0]` ），返回 `nums` 中每个元素的 **下一个更大元素** 。
 *
 * 数字 `x` 的 **下一个更大的元素** 是按数组遍历顺序，这个数字之后的第一个比它更大的数，这意味着你应该循环地搜索它的下一个更大的数。如果不存在，则输出 `-1` 。
 *
 * @param nums
 * @returns
 */
export default function (nums: number[]): number[] {
	const stack = [];
	const length = nums.length;
	// 结果数组默认全部填充 -1，栈中剩余的元素找不到「下一个更大的元素」，为 -1
	const result = new Array(length).fill(-1);

	for (let i = 0; i < length * 2; i++) {
		let num = nums[i % length];
		while (stack.length && num > nums[stack[stack.length - 1]]) {
			const idx = stack.pop()!;
			result[idx] = num;
		}
		stack.push(i % length);
	}

	return result;
}
